home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / listdrag / listdrag.frm < prev    next >
Text File  |  1995-09-06  |  5KB  |  168 lines

  1. VERSION 2.00
  2. Begin Form Form1 
  3.    Caption         =   "ListDrag Demo"
  4.    ClientHeight    =   3195
  5.    ClientLeft      =   1875
  6.    ClientTop       =   3660
  7.    ClientWidth     =   5865
  8.    Height          =   3600
  9.    Left            =   1815
  10.    LinkMode        =   1  'Source
  11.    LinkTopic       =   "Form1"
  12.    ScaleHeight     =   3195
  13.    ScaleWidth      =   5865
  14.    Top             =   3315
  15.    Width           =   5985
  16.    Begin ListBox List1 
  17.       FontBold        =   -1  'True
  18.       FontItalic      =   0   'False
  19.       FontName        =   "Courier"
  20.       FontSize        =   12
  21.       FontStrikethru  =   0   'False
  22.       FontUnderline   =   0   'False
  23.       Height          =   270
  24.       Left            =   480
  25.       TabIndex        =   0
  26.       Top             =   480
  27.       Width           =   4935
  28.    End
  29.    Begin Label Label2 
  30.       Caption         =   "Hold down Ctrl key and use Up and Down arrow keys to move a line in the listbox.  Or press Ctrl and drag a line with the mouse."
  31.       Height          =   620
  32.       Left            =   360
  33.       TabIndex        =   2
  34.       Top             =   2400
  35.       Width           =   5175
  36.    End
  37.    Begin Label Label1 
  38.       Enabled         =   0   'False
  39.       Height          =   10
  40.       Left            =   0
  41.       TabIndex        =   1
  42.       Top             =   0
  43.       Visible         =   0   'False
  44.       Width           =   10
  45.    End
  46. End
  47. ' LISTSWAP.MAK a demonstration Visual Basic program to show
  48. ' how single items in a list box can be reordered using
  49. ' Ctrl-UpArrow/DownArrow or by pressing Ctrl and dragging
  50. ' a list item with the mouse.
  51.  
  52. ' Sue Mosher, 202-736-1136, CIS 75140,543
  53. ' Public domain
  54.  
  55. Dim MoveLine As Integer     ' values: -1 for UP move,
  56.                             ' 1 for DOWN, 0 for none
  57.  
  58. Dim Item1 As Integer        ' line to be moved
  59. Dim RowSize As Integer
  60. Dim MoveNow As Integer
  61.  
  62. Const ROWS = 5
  63. Const TRUE = -1
  64. Const FALSE = 0
  65. Const CTRL = 2
  66. Const KEY_UP = &H26
  67. Const KEY_DOWN = &H28
  68.  
  69. Sub Form_Load ()
  70.     List1.Height = 20 * ROWS * List1.FontSize
  71.     RowSize = List1.Height / ROWS
  72.     For I = 1 To ROWS
  73.         List1.AddItem ("Item " + Str$(I))
  74.     Next I
  75.     List1.ListIndex = 0
  76.     MoveNow = False
  77. End Sub
  78.  
  79. Sub List1_DragDrop (Source As Control, X As Single, Y As Single)
  80.     MoveNow = False
  81.     Label1.Enabled = False
  82.     List1.SetFocus
  83. End Sub
  84.  
  85. Sub List1_DragOver (Source As Control, X As Single, Y As Single, State As Integer)
  86.     Select Case State
  87.         Case 1             ' if leaving list, turn off
  88.             Label1.Drag 2   ' drag & force drop
  89.         Case 2
  90.             If MoveRow(Y) <> 0 Then  ' if within move range
  91.                 Item2% = Item1% + MoveRow(Y)
  92.                 ListSwap Item1%, Item2%, List1
  93.                 Item1% = Item2%
  94.                 List1.ListIndex = Item1%
  95.             End If
  96.     End Select
  97. End Sub
  98.  
  99. Sub List1_KeyDown (KeyCode As Integer, Shift As Integer)
  100.     CtrlDown% = (Shift And CTRL) > 0
  101.     UpPressed% = (KeyCode = KEY_UP)
  102.     DownPressed% = (KeyCode = KEY_DOWN)
  103.  
  104.     If CtrlDown% And UpPressed% Then
  105.         Item1% = List1.ListIndex        ' set item to be moved
  106.         If Item1% > 0 Then
  107.             MoveLine = -1
  108.         Else
  109.             MoveLine = 0
  110.              Beep
  111.         End If
  112.     End If
  113.  
  114.     If CtrlDown% And DownPressed% Then
  115.         Item1% = List1.ListIndex
  116.         If Item1% < (List1.ListCount - 1) Then
  117.             MoveLine = 1
  118.         Else
  119.             MoveLine = 0
  120.             Beep
  121.         End If
  122.     End If
  123.  
  124.     If MoveLine <> 0 Then ListSwap Item1%, (Item1% + MoveLine), List1
  125.  
  126. End Sub
  127.  
  128. Sub List1_KeyUp (KeyCode As Integer, Shift As Integer)
  129.     CtrlDown% = (Shift And CTRL) > 0
  130.     If Not CtrlDown% Then MoveLine = 0
  131. End Sub
  132.  
  133. Sub List1_MouseDown (Button As Integer, Shift As Integer, X As Single, Y As Single)
  134.     CtrlDown% = (Shift And CTRL) > 0
  135.     If CtrlDown% Then
  136.         Item1% = List1.ListIndex
  137.         Label1.Tag = Str$(Item1%)   ' get item to be moved
  138.         MoveNow = True
  139. '       move label control to mouse position and start
  140. '       dragging it
  141.         Label1.Enabled = True
  142.         Label1.Move (List1.Left + X), (List1.Top + Y)
  143.         Label1.Drag 1
  144.     End If
  145. End Sub
  146.  
  147. Sub ListSwap (Line1 As Integer, Line2 As Integer, ListBox As Control)
  148.     Temp$ = ListBox.List(Line1)
  149.     ListBox.List(Line1) = ListBox.List(Line2)
  150.     ListBox.List(Line2) = Temp$
  151. End Sub
  152.  
  153. Function MoveRow (Y As Single)
  154.     Offset% = (Y \ RowSize) - Item1%
  155.     If Abs(Offset%) = 1 Then        ' if within 1 row
  156.         MoveRow = Offset%
  157.     Else
  158.         MoveRow = 0
  159.     End If
  160. End Function
  161.  
  162. Sub SwapInt (Int1%, Int2%)
  163.     TempInt% = Int1%
  164.     Int1% = Int2%
  165.     Int2% = TempInt%
  166. End Sub
  167.  
  168.